package yto.freemarker.springcloud;

import com.netflix.zuul.ZuulFilter;
import com.netflix.zuul.context.RequestContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.servlet.http.HttpServletRequest;

public class PreZuulFilter extends ZuulFilter {
    private static final Logger LOGGER = LoggerFactory.getLogger(PreZuulFilter.class);

    /**
     * 判断当前filter是否执行
     *
     * @return
     */
    @Override
    public boolean shouldFilter() {
        return true;    //true:展示filter的信息，false：不展示filter的信息
//    return false;    //true:展示filter的信息，false：不展示filter的信息
    }

    /**
     * failter的核心逻辑处理地方
     *
     * @return
     */
    @Override
    public Object run() {
        HttpServletRequest request = RequestContext.getCurrentContext().getRequest();
        String host = request.getRemoteHost();
        PreZuulFilter.LOGGER.info("请求的host:{}", host);
        return null;
    }

    /**
     * 返回的filter类型
     * <p>
     * pre: 对请求进行预处理，比如鉴权、限流等
     * <p>
     * route：是Zuul理由动作的执行者，发起请求的地方
     * <p>
     * post：在源服务返回结果或者异常信息发生后执行的，对返回的信息做一些处理
     * <p>
     * error：在整个生命周期内如果发生异常，则会进入error filter，可做全局异常处理
     *
     * @return
     */
    @Override
    public String filterType() {
        return "pre";
    }

    /**
     * 使用返回值设定的filter执行次序
     *
     * @return
     */
    @Override
    public int filterOrder() {
        return 1;
    }

}
